package com.huayue.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 日期工具
 */
public class DateHelper {

    /**
     * Date转年月日时分秒String
     *
     * @param d
     * @return
     */
    public static String DateToString(Date d) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String Date = sdf.format(d);
        return Date;
    }

    /**
     * String转年月日时分秒Date
     *
     * @param date
     * @return
     */
    public static Date StringToDate(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = null;
        try {
            d = sdf.parse(date);
        } catch (ParseException e) {
            // System.out.println("输入错误");
        }
        return d;
    }

    /**
     * String日期转年月日Date
     *
     * @param date
     * @return
     */
    public static Date StringToDateShort(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d = null;
        try {
            d = sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return d;

    }

    /**
     * 日期转年月日String
     *
     * @param date
     * @return
     */
    public static String DateToStringShort(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String Date = sdf.format(date);
        return Date;
    }
    // 根据时间范围获取每一天

    /**
     * 传入String类型的时间 2020-1-1
     *
     * @param dBegin
     * @param dEnd
     * @return
     * @throws ParseException
     */
    public static List<Date> findDates(String dBegin, String dEnd) throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date begin = sdf.parse(dBegin);
        Date end = sdf.parse(dEnd);

        List lDate = new ArrayList();
        lDate.add(dBegin);
        Calendar calBegin = Calendar.getInstance();
        // 使用给定的 Date 设置此 Calendar 的时间
        calBegin.setTime(begin);
        Calendar calEnd = Calendar.getInstance();
        // 使用给定的 Date 设置此 Calendar 的时间
        calEnd.setTime(end);
        calBegin.add(Calendar.DATE, -1);

        // 测试此日期是否在指定日期之后
        while (end.after(calBegin.getTime())) {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
            lDate.add(calBegin.getTime());
        }
        return lDate;
    }

    /**
     * 通过时间秒毫秒数判断两个时间的间隔天数
     * 
     * @param Date1
     *            老时间
     * @param Date2
     *            新时间
     * @return
     */
    public static int getDateRangeNumber(Date Date1, Date Date2) {
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(Date1);

        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(Date2);
        int day1 = cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);

        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        if (year1 != year2) // 同一年
        {
            int timeDistance = 0;
            for (int i = year1; i < year2; i++) {
                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) // 闰年
                {
                    timeDistance += 366;
                } else // 不是闰年
                {
                    timeDistance += 365;
                }
            }
            return timeDistance + (day2 - day1);
        } else // 不同年
        {
            return day2 - day1;
        }

    }

    /**
     * 指定日期加上天数后的日期
     * 
     * @param num
     *            为增加的天数
     * @param newDate
     *            创建时间
     * @return
     * 
     */
    public static String plusDayShort(int num, String newDate) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date currdate = null;
        try {
            currdate = format.parse(newDate);
        } catch (ParseException e) {
            System.out.println(e.getMessage());
        }
        Calendar ca = Calendar.getInstance();
        ca.add(Calendar.DATE, num);
        currdate = ca.getTime();
        String enddate = format.format(currdate);
        return enddate;
    }
}
